<?php
/**
 * Modelo CRUD de Usuário com Login
 * Atributos minimos da tabela:
 *  id
 * 	login
 *  senha
 *  papel
 * @author Renato Lenz Costalima
 * 
 * Trabalhos futuros
 * 	tratar exceções do banco de dados. validando restrições de campos duplicados ou nulos direto no banco de dados.
 */
class TICE_Crud_Usuario extends PC4_Crud_Abstrato {

	function __construct($tabela = 'usuarios') {
		parent::__construct($tabela);
	}
	
	/**
	 * Cria a tabela no banco de dados
	 */
	function criaTabela() {
		$this->db->query("
			CREATE TABLE `renorbio`.`" . $this->tabela . "` (
			`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
			`login` VARCHAR( 32 ) NOT NULL ,
			`senha` VARCHAR( 32 ) NOT NULL ,
			`papel` VARCHAR( 10 ) NOT NULL ,
			UNIQUE (
			`login`
			)
			) ENGINE = InnoDB
		");
	}

	/**
	 * Verifica se o cliente já se encontra cadastrado no banco
	 * @param array $campos
	 * @param int $id
	 * @return array $erros - vazio caso não tenha erros
	 */
	function valida($campos, $id=0) {
		$erros = array();
						
		if ($campos["login"] == "") {
			$erros["login"] = "Login é um campo obrigatório.";
		}
		$rs = $this->consulta(array('login' => $campos['login'], 'id <>' => $id), 1, 1);
		if (!empty($rs)) {
			$erros[] = "Este usuário já existe.";
		}
		
		return $erros;
	}
	
	function insere($registro) {
		if ($registro["senha"] != $registro["confirmacao"]) {
			$erros[] = "Senha e confirmação não coincidem.";
			return $erros;
		}
		$registro['senha'] = md5($registro['senha']);
		unset($registro['confirmacao']);
		try {
			$erros = parent::insere($registro);			
		}
		catch (Exception $e) {
			d($e);
		}
		return $erros;
	}
	
	function edita($registro, $id, $nome_id = 'id', $debug = false) {
		if (!empty($registro['senha'])) {
			if ($registro["senha"] != $registro["confirmacao"]) {
				$erros[] = "Senha e confirmação não coincidem.";
				return $erros;
			}
			unset($registro['confirmacao']);
			$registro['senha'] = md5($registro['senha']);
		}
		try {
			$erros = parent::edita($registro, $id, $nome_id, $debug);			
		}
		catch (Exception $e) {
			d($e);
		}
		return $erros;
	}
	
	
	function trataRegistro($registro) {
		return $registro;
	}
	
}
?>